Parameter lesen & schreiben
Parameter sind das Herzstück von Revit. Sie speichern Werte wie Maße, Material oder Benutzerdaten.
Einheiten: Revit speichert Längen intern in Fuß. Immer konvertieren!
Parameter lesen
C#
C# — Parameter lesen
using Autodesk.Revit.DB;
public void ReadParameter(Element elem)
{
Parameter param = elem.get_Parameter(
BuiltInParameter.HOST_WIDTH_PARAM
);
if (param != null && !param.IsReadOnly)
{
double value = param.AsDouble();
TaskDialog.Show("Wert", value.ToString());
}
}
Python
Python — Parameter lesen
from Autodesk.Revit.DB import BuiltInParameter
param = elem.get_Parameter(BuiltInParameter.HOST_WIDTH_PARAM)
if param and not param.IsReadOnly:
value = param.AsDouble()
print(f"Wert: {value}")
Parameter setzen
C#
C# — Parameter setzen
using (Transaction t = new Transaction(doc, "Parameter setzen"))
{
t.Start();
Parameter param = elem.get_Parameter(
BuiltInParameter.HOST_WIDTH_PARAM
);
if (param != null && !param.IsReadOnly)
param.Set(1.2); // Wert in Fuß
t.Commit();
}
Python
Python — Parameter setzen
from Autodesk.Revit.DB import Transaction
with Transaction(doc, "Parameter setzen") as t:
t.Start()
param = elem.get_Parameter(BuiltInParameter.HOST_WIDTH_PARAM)
if param and not param.IsReadOnly:
param.Set(1.2) # Wert in Fuß
t.Commit()
Kategorien & BuiltIns
Verwende BuiltInCategory, um spezifische Elementtypen zu filtern.
| BuiltInCategory | Beschreibung | Beispiel |
|---|---|---|
OST_Walls |
Wände | ElementCategoryFilter(BuiltInCategory.OST_Walls) |
OST_Doors |
Türen | ElementCategoryFilter(BuiltInCategory.OST_Doors) |
OST_Windows |
Fenster | ElementCategoryFilter(BuiltInCategory.OST_Windows) |
OST_Furniture |
Möbel | ElementCategoryFilter(BuiltInCategory.OST_Furniture) |
OST_StructuralColumns |
Stützen | ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns) |
FilteredElementCollector
Der effizienteste Weg, Elemente im Revit-Modell zu finden.
Alle Elemente einer Klasse finden
C#
C# — Alle Wände finden
FilteredElementCollector collector = new FilteredElementCollector(doc)
.OfClass(typeof(Wall))
.WhereElementIsNotElementType();
foreach (Wall wall in collector)
{
TaskDialog.Show("Wand", wall.Name);
}
Python
Python — Alle Wände finden
from Autodesk.Revit.DB import Wall, FilteredElementCollector
walls = FilteredElementCollector(doc).OfClass(Wall)
for wall in walls:
print(wall.Name)
Mehrere Filter kombinieren
C#
C# — Logischer UND-Filter
ElementCategoryFilter catFilter = new ElementCategoryFilter(
BuiltInCategory.OST_Doors
);
ElementClassFilter classFilter = new ElementClassFilter(typeof(Door));
LogicalAndFilter combined = new LogicalAndFilter(catFilter, classFilter);
FilteredElementCollector collector = new FilteredElementCollector(doc)
.WherePasses(combined);
Einheiten-Konvertierung
Revit-Intern: Länge = Fuß, Fläche = Quadratfuß, Volumen = Kubikfuß
C#
C# — Meter zu Fuß konvertieren
using Autodesk.Revit.DB;
// Meter zu Revit-Intern (Fuß)
double meters = 1.5;
double feet = UnitUtils.ConvertToInternalUnits(
meters, UnitTypeId.Meters
);
// Revit-Intern zu Meter anzeigen
string display = UnitUtils.ConvertFromInternalUnits(
feet, UnitTypeId.Meters
).ToString();
Elemente verwalten
Elemente löschen
C#
C# — Elemente löschen
List<ElementId> idsToDelete = new List<ElementId>();
foreach (Wall wall in collector)
{
if (wall.Name.Contains("Alt"))
idsToDelete.Add(wall.Id);
}
using (Transaction t = new Transaction(doc, "Löschen"))
{
t.Start();
doc.Delete(idsToDelete);
t.Commit();
}
Häufige Fehler
| Fehler | Lösung |
|---|---|
NullReferenceException |
Parameter nicht gefunden. Immer if (param != null) prüfen. |
ArgumentException |
Ungültiger Parametername. BuiltInParameter Enum verwenden. |
| Falscher Einheitenwert | Immer UnitUtils für Konvertierung nutzen. |
| Keine Änderung sichtbar | Transaktion vergessen. t.Start() und t.Commit() prüfen. |